#include"List.h"

DLN* DListNodeSeTup(Value x)//开辟内存
{
    DLN *node=(DLN*)malloc(sizeof(DLN));
    if(node==NULL)
    {
        perror("node:");
    }
  node->data=x;
  node->next=NULL;
  node->prev=NULL;
   return node;
}
void DListNotPrint(DLN*phead)//打印
{
    DLN *cur=phead->next;
    while(cur!=phead)
    {
        printf("%d->",cur->data);
        cur=cur->next;
    }
    printf("NULL\n");
}
DLN *DListNodeInit(DLN* pphead)//初始化
{

   DLN *newhead =pphead;
   newhead= DListNodeSeTup(0);
   newhead->prev=newhead;
   newhead->next=newhead;
     return newhead;
}

void DListNodePushBack(DLN*phead,Value x)//尾插
{
    DLN *NewTail=DListNodeSeTup(x);

    DLN *OldTail=phead->prev;

    OldTail->next=NewTail;
    NewTail->next=phead;
    NewTail->prev=OldTail;
    phead->prev=NewTail;

}

void DListNodePopBack(DLN*phead)//尾删
{
    DLN *Tail=phead->prev;
    DLN*LastTail=Tail->prev;
    free(Tail);
    phead->prev=LastTail;
    LastTail->next=phead;
}


void DListNodePushFront(DLN*phead,Value x)//头插
{
    DLN*NewHead= DListNodeSeTup(x);
    DLN*OLdHead=phead->next;
    phead->next=NewHead;
    NewHead->prev=phead;
    NewHead->next=OLdHead;
    OLdHead->prev=NewHead;

}

void DListNodePopFront(DLN*phead)
{
    DLN *head=phead;
    DLN *next=phead->next;
    DLN*nextnext=next->next;
    head->next=next->next;
    nextnext->prev=head;
    free(next);
}


DLN* DListNotFind(DLN*phead,Value x)//查
{
    DLN *cur=phead;
    while(cur)
    {
        if(cur->data==x)
        {
            return cur;
        }
        cur=cur->next;
    }
    return NULL;
}
void ListInsert(DLN*pos,Value x)//pos位插
{
    DLN *LastPos=pos->prev;
    DLN*Newnode=DListNodeSeTup(x);
    LastPos->next=Newnode;
    Newnode->prev=LastPos;
    Newnode->next=pos;
    pos->prev=Newnode;

}
void ListErase(DLN*pos)//pos删
{
    DLN *LastPos=pos->prev;
    DLN *NextPos=pos->next;
    LastPos->next=NextPos;
    NextPos->prev=LastPos;
    free(pos);
}

void DListNotNULL(DLN **pphead)//制空
{
    while((*pphead)->next==(*pphead)->prev)
    {
        DLN *Tail=(*pphead)->prev;
        DLN *LastTail=Tail->prev;
        LastTail->next=(*pphead);
        (*pphead)->prev=LastTail;
        free(Tail);
    }

}

int DListNotsize(DLN*phead)
{
    if(phead->next==phead->prev)
        return 0;
    DLN *cur=phead->next;
    int size=0;
    while(cur!=phead)
    {
        ++size;
        cur=cur->next;
    }
}



